package com.kyivmohyla.kma2.dao;

import com.kyivmohyla.kma2.dao.mapper.OrderServEquipRowMapper;
import com.kyivmohyla.kma2.model.OrderServEquip;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.support.JdbcDaoSupport;

import java.util.List;

public class OrderServEquipDaoJdbc extends JdbcDaoSupport implements
        OrderServEquipDao {

    @Override
    public OrderServEquip getById(int id) throws DataAccessException {
        return getJdbcTemplate()
                .queryForObject(
                        "SELECT order_serv_equip.order_id, order_serv_equip.serv_equip_id FROM order_serv_equip WHERE order_serv_equip.order_id = ?",
                        new Object[]{id}, new OrderServEquipRowMapper());
    }

    @Override
    public List<OrderServEquip> getAll() throws DataAccessException {
        return getJdbcTemplate()
                .query("SELECT order_serv_equip.order_id, order_serv_equip.serv_equip_id FROM order_serv_equip ORDER BY order_serv_equip.order_id",
                        new OrderServEquipRowMapper());
    }

    @Override
    public void create(OrderServEquip orderServEquip) throws DataAccessException {
        getJdbcTemplate()
                .update("INSERT INTO order_serv_equip (order_serv_equip.order_id, order_serv_equip.serv_equip_id) VALUES (?, ?)",
                        orderServEquip.getOrderId(),
                        orderServEquip.getServEquipId());
    }

    @Override
    public void update(OrderServEquip orderServEquip) throws DataAccessException {
        getJdbcTemplate()
                .update("UPDATE order_serv_equip SET order_serv_equip.serv_equip_id = ? WHERE order_serv_equip.order_id = ?",
                        orderServEquip.getServEquipId(),
                        orderServEquip.getOrderId());
    }

    @Override
    public void delete(OrderServEquip orderServEquip) throws DataAccessException {
        getJdbcTemplate().update(
                "DELETE FROM order_serv_equip WHERE order_serv_equip.order_id = ? AND order_serv_equip.serv_equip_id = ?",
                orderServEquip.getOrderId(), orderServEquip.getServEquipId());
    }

    @Override
    public void addOrderServEquipList(List<OrderServEquip> objects) throws DataAccessException {
        for (OrderServEquip object : objects) {
            create(object);
        }
    }

    @Override
    public void deleteOrderServEquipList(List<OrderServEquip> objects) throws DataAccessException {
        for (OrderServEquip object : objects) {
            delete(object);
        }
    }

    @Override
    public void deleteOrderServEquipByOrderId(int id) throws DataAccessException {
        getJdbcTemplate().update("DELETE FROM order_serv_equip WHERE order_serv_equip.order_id = ?", id);
    }
}
